package uteis;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import entidades.entidade_base;

public class serializador
{
	public static boolean checar_arquivo_dados(String _nome_arquivo, Class<?> _classe)
	{
		return _nome_arquivo.contains(_classe.getSimpleName()
				+ serializador.separador_arquivo_dados)
				&& _nome_arquivo.contains(serializador.extensao_arquivo_dados);
	}
	
	public static final String extensao_arquivo_dados = ".ent";
	public static final String separador_arquivo_dados = "#";
	public static final String diretorio_dados = "./dados/";

	public serializador(String _nome_arquivo)
	{
		if(!_nome_arquivo.contains(serializador.diretorio_dados))
		{
			_nome_arquivo = serializador.diretorio_dados + _nome_arquivo;
		}
		
		this.nome_arquivo = _nome_arquivo;
	}

	public serializador(entidade_base _entidade)
	{
		this( serializador.diretorio_dados + _entidade.getClass().getSimpleName()
				+ serializador.separador_arquivo_dados + String.valueOf(_entidade.get_id())
				+ serializador.extensao_arquivo_dados);
		
		this.entidade = _entidade;
	}

	private entidade_base entidade;

	private String nome_arquivo;

	public entidade_base carregar()
	{
		try
		{
			FileInputStream fis = new FileInputStream(this.nome_arquivo);

			@SuppressWarnings("resource")
			ObjectInputStream ois = new ObjectInputStream(fis);
			
			entidade_base entidade = (entidade_base) ois.readObject();

			return entidade;
		} catch (Exception exc)
		{
			return null;
		}
	}

	public boolean gravar()
	{
		try
		{
			System.out.println(this.nome_arquivo);
			FileOutputStream fos = new FileOutputStream(this.nome_arquivo);

			@SuppressWarnings("resource")
			ObjectOutputStream oos = new ObjectOutputStream(fos);

			oos.writeObject(this.entidade);

			return true;
		} catch (Exception exc)
		{
			return false;
		}
	}

	public boolean remover()
	{
		try
		{
			File arquivo = new File(this.nome_arquivo);

			arquivo.delete();

			return true;
		} catch (Exception exc)
		{
			return false;
		}
	}
}